
static unsigned char level[1000];
static void printLine(int depth, char const * separator1, char const *separator2) {
    int i = 0;
    for (; i < depth - 1; ++i)
    {
        if (2 == level[i])
        {
            std::cout << separator1;
        }
        else
        {
            std::cout << separator2;
        }
    }
}

template <class T>
static void displayBiTree(BinNodePosi(T) p, int depth) {
    if(!p) return;

// (1)
// |
// └---(3)
// |   |
// |   └---(7)
// |   |
// |   └---(6)
// |       |
// |       └---(9)
// |
// └---(2)
/**
 * @brief 
 * 除了第0层，每层都要打印两行
 * 
 */
    if(!depth) {
        std::cout << "(" << p->data << ")" << std::endl;
    }
    else {
        char sep1[] = "|    ";
        char sep2[] = "     ";
        char sep3[] = "|----";

        // 第一行
        printLine(depth, sep1, sep2);
        std::cout << sep1 << std::endl;
        // 第二行
        printLine(depth, sep1, sep2);
        std::cout << sep3
                  << "(" << p->data << ")" << std::endl;
    }

    if(p->lc&& !p->rc) {
        level[depth] = 1;
        displayBiTree(p->lc, 1 + depth);
    }
    else if(!p->lc&& p->rc) {
        level[depth] = 1;
        displayBiTree(p->rc, 1 + depth);
    }
    else if(p->lc&& p->rc) {
        level[depth] = 2;
        displayBiTree(p->lc, 1 + depth);
        level[depth] = 1;
        displayBiTree(p->rc, 1 + depth);
    }
    level[depth] = 0;
}

template <typename T>
void show_BinNodePosi(BinNodePosi(T) p) {
	if(!p) return;

	displayBiTree(p, 0);
}